#ifndef __ISHAPPYNUM_H__
#define __ISHAPPYNUM_H__
#include <unordered_set>
using namespace std;
/*
* leetcode 202 快乐数
*/

int GetSquareSum(int n);
/*
* 对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
* 然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
* 如果这个过程 结果为 1，那么这个数就是快乐数。
* 
* 注意: 若该数不是快乐数时(即无限循环), 在过程中必定会多次出现相同的平方和
*		根据这个依据, 可以制定相应的暂停时机
*/
bool IsHappy(int n) 
{
	unordered_set<int> squareSums;
	while (true) {
		n = GetSquareSum(n);
		if (n == 1)
			return true;

		if (squareSums.find(n) != squareSums.end())
			return false;

		squareSums.insert(n);
	}
}

int GetSquareSum(int n) {
	int sum = 0;
	while (n > 0) {
		int unit = n % 10;
		sum += (unit * unit);
		n /= 10;
	}

	return sum;
}
#endif // !__ISHAPPYNUM_H__

